// 条件变量老是不行。不知道是不是编译器版本问题。。拿树莓派测试下
// 树莓派
// aarch64-linux-gnu-g++ testarm.cpp -lpthread
// 没什么问题。。。不知道是不是 64 位问题
// 原来是函数对象保存值的问题。。

#include <iostream>
#include <condition_variable>
#include <thread>
#include <chrono>

int main()
{
    std::cout << "Hello" << std::endl;

    auto so = std::make_shared<std::condition_variable>();
    std::mutex locker;

    std::unique_lock<std::mutex> lock(locker);

    std::cout << time(NULL) << ":" << 00 << std::endl;

    std::thread ab([wso = std::weak_ptr<std::condition_variable>(so)]() {
        auto so = wso.lock();
        if(!so)
        return;

        std::this_thread::sleep_for(std::chrono::seconds(3));
        
        so->notify_one(); 
        std::cout << time(NULL) << ":" << 11 <<std::endl; 
    });

    so->wait_for(lock, std::chrono::seconds(10));

    std::cout << time(NULL) << ":" << 22 << std::endl;

    ab.join();
    return 0;
}
